home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / SERVICES.PAK / WSYSINC.H < prev   
C/C++ Source or Header  |  1997-05-06  |  5KB  |  192 lines

  1. //----------------------------------------------------------------------------
  2. // Borland Services Library
  3. // Copyright (c) 1993, 1997 by Borland International, All Rights Reserved
  4. //
  5. //$Revision:   5.15  $
  6. //
  7. // Includes windowing system headers, with necessary macros defined
  8. //----------------------------------------------------------------------------
  9. #if !defined(SERVICES_WSYSINC_H)
  10. #define SERVICES_WSYSINC_H
  11.  
  12. #if !defined(SERVICES_DEFS_H)
  13. # include <services/defs.h>
  14. #endif
  15.  
  16. //
  17. // For MS Windows, get windows.h and other standard windows headers
  18. //
  19. #if defined(BI_PLAT_MSW)
  20. # if defined(_INC_WINDOWS)
  21.     //
  22.     // WINDOWS.H has already been included - Ensure that
  23.     // 1. STRICT is defined
  24.     // 2. That the user did not request us to map BOOL to bool
  25.     //
  26. #   if !defined(STRICT)
  27. #     error if windows.h is included before services/wsysinc.h, STRICT must be defined
  28. #   endif
  29. #   if defined(BI_REDEFINE_BOOL)
  30. #     error windows.h must be included via services/wsysinc.h for BOOL redefinition
  31. #   endif
  32. # else
  33.     //
  34.     // We're going to pull in WINDOWS.H - define macros required for
  35.     // framework libraries.
  36.     //
  37. #   define NOMINMAX
  38. #   define STRICT
  39.  
  40.     //
  41.     // Have WINDOWS.H use WBOOL as its 'int' alias instead of BOOL if
  42.     // 'BOOL to bool' mapping has been requested.
  43.     //
  44. #   if defined(BI_UNIQUE_BOOL) && defined(BI_REDEFINE_BOOL)
  45. #     undef  BOOL
  46. #     define BOOL WBOOL
  47. #   endif
  48. #   include <windows.h>
  49. # endif
  50.  
  51. //
  52. // Retrieve other Windows headers (before we proceed with BOOL-remapping)
  53. //
  54.  
  55. // VER.H is currently mucking with definitions of UINT if LIB is not
  56. // defined.
  57. //
  58. # if defined(BI_PLAT_WIN16)
  59. #   if !defined(LIB)
  60. #     define LIB
  61. #   endif
  62. #   include <ver.h>
  63. #   undef LIB
  64. # endif
  65.  
  66. // Grab shell extension header
  67. //
  68. # if !defined(_INC_SHELLAPI) && !defined(BI_PLAT_WIN32)
  69. #   include <shellapi.h>
  70. # endif
  71.  
  72. //
  73. // Get Windows OLE2 headers only if requested
  74. //
  75. # if defined(INC_OLE2)
  76. #   include <services/ole2inc.h>
  77. # endif
  78.  
  79. // Pre v5.0 tools, LPCWSTR is not defined in 16-bits
  80. //
  81. //
  82. # if defined(__BORLANDC__) && (__BORLANDC__ < 0x0500)
  83. #   if !defined(LPCWSTR) && defined(BI_PLAT_WIN16)
  84.       typedef const wchar_t far* LPCWSTR;
  85.       typedef       wchar_t far* LPWSTR;
  86. #   endif
  87. # endif
  88.  
  89.  
  90. // Get WIN95-specific definitions if we're using an earlier version
  91. // of WINDOWS.H
  92. //
  93. # if defined(BI_PLAT_WIN16)
  94. #   if (WINVER < 0x0400)
  95. #     if !defined(SERVICES_WIN95_16_H)
  96. #       include <services/win95_16.h>
  97. #     endif
  98. #   endif
  99. # endif
  100.  
  101. //
  102. // Map BOOL, TRUE and FALSE to bool, true and false respectively.
  103. //
  104. # if defined(BI_UNIQUE_BOOL) && defined(BI_REDEFINE_BOOL)
  105. #   undef  BOOL
  106. #   define BOOL bool
  107. #   undef  FALSE
  108. #   define FALSE false
  109. #   undef  TRUE
  110. #   define TRUE true
  111. # endif
  112.  
  113. //
  114. // For compatibility only, the inline function versions in services/defs.h
  115. // are recomended
  116. //
  117. # if defined(BI_PLAT_WIN16)
  118. #   define MAKEWORD(a, b)      ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
  119.  
  120. #   if !defined(LOWORD)
  121. #     define LOWORD(l)         ((uint16)(l))
  122. #   endif
  123. #   if !defined(HIWORD)
  124. #     define HIWORD(l)         ((uint16)((uint32)(l) >> 16))
  125. #   endif
  126.  
  127. # endif
  128.  
  129. //
  130. // Current module instance in RTL
  131. //
  132. # if defined(BI_PLAT_WIN16)
  133.     extern __cdecl HINSTANCE _hInstance;
  134. # else  // BI_PLAT_WIN32
  135.     extern HINSTANCE _hInstance;
  136. # endif
  137. //
  138. // For OS/2, get os2.h
  139. //
  140. #elif defined(BI_PLAT_OS2)
  141. # if !defined(__OS2_H)
  142. #   define INCL_BASE
  143. #   define INCL_PM 
  144. #   include <os2.h>
  145. # endif
  146.  
  147. #endif
  148.  
  149. #if defined(BI_PLAT_WIN32)
  150.   union _ULARGE_INTEGER;
  151.   union _LARGE_INTEGER;
  152. #else
  153.   class far _ULARGE_INTEGER;
  154.   class far _LARGE_INTEGER;
  155. #endif
  156.  
  157. #if defined(BI_NAMESPACE)
  158. namespace ClassLib {
  159. #endif
  160.  
  161. //
  162. // Large, 64bit integer classes
  163. //
  164. class uint64 {
  165.   public:
  166.     uint64(uint32 low, uint32 high) {LowPart = low; HighPart = high;}
  167.     uint64() {LowPart = HighPart = 0;}
  168.     uint64(_ULARGE_INTEGER uli) {*(_ULARGE_INTEGER*)this = uli;}
  169.     operator _ULARGE_INTEGER() const {return *(_ULARGE_INTEGER*)this;}
  170.  
  171.     uint32 LowPart;
  172.     uint32 HighPart;
  173. };
  174.  
  175. class int64 {
  176.   public:
  177.     int64(uint32 low, long high) {LowPart = low; HighPart = high;}
  178.     int64(long low) {LowPart = low; HighPart = low<0 ? -1 : 0;}
  179.     int64() {LowPart = HighPart = 0;}
  180.     int64(_LARGE_INTEGER li) {*(_LARGE_INTEGER*)this = li;}
  181.     operator _LARGE_INTEGER() const {return *(_LARGE_INTEGER*)this;}
  182.  
  183.     uint32 LowPart;
  184.     int32  HighPart;
  185. };
  186.  
  187. #if defined(BI_NAMESPACE)
  188. }       // namespace ClassLib
  189. #endif
  190.  
  191. #endif  // CLASSLIB_WSYSINC_H
  192.